package com.springboot.controller;

import com.springboot.bean.Monster;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.Cookie;
import java.util.List;
import java.util.Map;

@RestController
public class ParameterController {
    /**
     * @param id
     * @param name
     * @param map
     * @return
     * @PathVariable Map<String, String> map ：把所有的传递的值传入map中
     */
    @GetMapping("/monster/{id}/{name}")
    public String pathVariable(@PathVariable("id") Integer id,
                               @PathVariable("name") String name,
                               @PathVariable Map<String, String> map) {
        System.out.println("id=" + id);
        System.out.println("name=" + name);
        System.out.println("map=" + map);
        return "success";
    }

    /**
     * @param host
     * @return
     * @RequestHeader Map<String, String> header:表示获取http请求头的所有信息
     * @RequestHeader("Host") String hos：表示获取http请求头的Host信息
     */
    @GetMapping("/requestHeader")
    public String questHeader(@RequestHeader("Host") String host,
                              @RequestHeader Map<String, String> header) {
        System.out.println("host=" + host);
        System.out.println("header=" + header);
        return "success";
    }

    /**
     * 如果我们希望将所有的请求参数都获取到
     * 可以使用@RequestParam Map<String,String> paras；
     * 它会把所有的值传入Map中，但是有一个小问题就是如果是复选框等等一个key对应多个值的话
     * 就会只显示第一个。
     * @param name
     * @param fruits
     * @return
     */
    @GetMapping("/hi")
    public String hi(@RequestParam(value = "name") String name,
                     @RequestParam("fruit")List<String> fruits,
                     @RequestParam Map<String,String> paras) {
        System.out.println("name="+name);
        System.out.println("fruits="+fruits);
        System.out.println("paras="+paras);
        return "success";
    }

    /**
     * 因为我的浏览器目前没有cookie，我们可以自己设置cookie
     * 如果要测试，可以先写一个方法，在浏览器创建对应的cookie
     * 1.value ="cookie_key"表示接收名字为 cookie_key的cookie
     * 2.如果浏览器携带来对应的cookie，那么后面的参数是String，则接收到的是对应对value
     * 3.后面的参数是Cookie，则接收到的是封装好的对应的cookie
     * @param val
     * @param cookie
     * @return
     */
    @GetMapping("/cookie")
    public String cookie(@CookieValue(value = "cookie_key",required = false) String val,
                         @CookieValue(value = "usename",required = false)Cookie cookie) {
        System.out.println("cookie_key--"+val);
        System.out.println("usename--"+cookie.getName()+"--"+cookie.getValue());
        return "success";
    }

    /**
     * @RequestBody :是整体取出Post请求的内容
     * @param content
     * @return
     */
    @PostMapping("/save")
    public String postMethod(@RequestBody String content) {
        System.out.println("content--"+content);
        return "success";
    }
    @PostMapping("/savemonster")
    public String saveMonster(Monster monster){
        System.out.println("monster--"+monster);
        return "success";
    }
}
